package com.chuangke.framework.service;

import java.util.Collection;
import java.util.List;

import com.chuangke.framework.model.LevelModel;

/**
 * 树形字典接口
 */
public interface TreeDictModelService<T extends LevelModel<T>> extends GridDictModelService<T> {

    /**
     * @return 字典树
     */
    List<T> findTree();

    /**
     * 查询所有的字典列表，并包含children
     *
     * @return
     */
    List<T> findListWithChildren();

    /**
     * 查找明细的字典数据
     *
     * @return
     */
    List<T> findLastLevel();

    /**
     * 查找对应字典数据下面的明细字典数据
     *
     * @return
     */
    List<T> findLastLevel(String id);

    /**
     * 查找对应字典的下一级
     *
     * @return
     */
    List<T> findNextLevel(String id);

    /**
     * 查找节点的所有子节点（包括本身及所有后代）
     *
     * @param idList
     * @return
     */
    List<T> findAllChildren(List<String> idList);

    /**
     * 查找指定级数的字典数据
     *
     * @return
     */
    List<T> findByLevel(int level);

    /**
     * 根据传入的编码，查找有分级血缘关系的上下级
     *
     * @param idList
     * @return 返回分级血缘关系树
     */
    List<T> findKinshipTree(Collection<String> idList);

    /**
     * 查找
     *
     * @param deptId
     * @return
     */
    T findParent(String deptId);

    /**
     * 对数据进行分级，更新数据的level,is_last_level,data_domain
     */
    void level();

}